package handler;

import dao.CidadeDao;
import dao.ClienteDao;
import dao.EstadoDao;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.enterprise.context.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.inject.Named;
import javax.persistence.RollbackException;
import pojo.Cidade;
import pojo.Cliente;
import pojo.Estado;

/**
 *
 * @author Vanessinha
 */
@Named(value = "clienteHandler")
@SessionScoped
public class ClienteHandler implements Serializable {

    @EJB
    private ClienteDao clientedao = new ClienteDao();
    @EJB
    private CidadeDao cidadedao = new CidadeDao();
    @EJB
    private EstadoDao estadodao = new EstadoDao();
    private Cliente cliente = new Cliente();
    private List<Cliente> listacliente = new ArrayList<>();
    private Cliente excluido;
    private long idCidade;
    private long idEstado;

    public ClienteHandler() {
    }

    public long getIdCidade() {
        return idCidade;
    }

    public void setIdCidade(long idCidade) {
        this.idCidade = idCidade;
    }

    public long getIdEstado() {
        return idEstado;
    }

    public void setIdEstado(long idEstado) {
        this.idEstado = idEstado;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public ClienteDao getClientedao() {
        return clientedao;
    }

    public void setClientedao(ClienteDao clientedao) {
        this.clientedao = clientedao;
    }

    public Cliente getExcluido() {
        return excluido;
    }

    public void setExcluido(Cliente excluido) {
        this.excluido = excluido;
    }

    public Cliente getcliente() {
        return cliente;
    }

    public void setcliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public ClienteDao getclientedao() {
        return clientedao;
    }

    public void setclientedao(ClienteDao clientedao) {
        this.clientedao = clientedao;
    }

    public List<Cliente> getListacliente() {
        return listacliente;
    }

    public void setListacliente(List<Cliente> listacliente) {
        this.listacliente = listacliente;
    }

    public String salvar() {
        cliente.setCliCidade(cidadedao.pesquisar(idCidade));
        cliente.setCliEstado(estadodao.pesquisar(idEstado));
        clientedao.inserir(cliente);
        cliente = new Cliente();
        cancelar();
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "CONFIRMAÇÃO",
                "Cadastrado realizado com sucesso!"));
        return "CadastroCliente.xhtml";
    }

    public List<Cliente> listacliente() {
        return listacliente = clientedao.getAll();
    }

    public String removercliente(Cliente obj) {
        try {
            clientedao.excluir(obj);
            cancelar();
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
                    "CONFIRMAÇÃO", "Registro removido com sucesso!"));
        } catch (RollbackException e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,
                    "ATENÇÃO", "Registro já esta em uso, não pode ser removido."));
        }
        return "CadastroCliente.xhtml";
    }

    public void parametroRemover(ActionEvent event) {
        UIComponent link = event.getComponent();
        UIParameter param = (UIParameter) link.findComponent("idParaRemover");
        excluido = (Cliente) param.getValue();
    }

    public void remover() {
        removercliente(excluido);
        excluido = null;
    }

    public void alterar(Cliente obj) {
        idCidade = obj.getCliCidade().getCidCodigo();
        idEstado = obj.getCliEstado().getEstCodigo();
        obj = clientedao.pesquisar(obj.getCliCodigo());
        this.cliente = obj;
    }

    public String cancelar() {
        idCidade = 0L;
        idEstado = 0L;
        cliente = new Cliente();
        return "CadastroCliente.xhtml";
    }

    public String paginaEstado() {
        return "CadastroEstado.xhtml";
    }

    public String paginaCidade() {
        return "CadastroCidade.xhtml";
    }

    public String paginaBairro() {
        return "CadastroBairro.xhtml";
    }

    private List<Cidade> cidades = new ArrayList<>();
    private Estado estado = new Estado();

    public List<Cidade> getCidades() {
        return cidades;
    }
    
    public void popularCidades() {
        cidades = estadodao.pesquisar(idEstado).getCidades();
        System.out.println("estado:" + estado.getEstDescricao());
        System.out.println("Cidade:" + cidades.get(0).getCidDescricao());

    }
}
